﻿<html DIR="LTR" xmlns:tool="http://www.microsoft.com/tooltip" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ddue="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8" />
    <META NAME="save" CONTENT="history" />
    <title>Exemplo de tipo de dados SQLXML</title>
    
    <link rel="stylesheet" type="text/css" href="../local/Classic.css">
      
    </link>
    
    <script src="../local/script.js">
      
    </script><script src="../local/script_main.js">&amp;nbsp;</script>
  </head>
  <body>
    <!--Topic built:04/01/2010 05:03:30-->

    
    
    
    
    
    
    
    
    
    <div id="header">
      <table width="100%" id="topTable"><tr>
          <td align="left">
            <span id="headerBold">Exemplo de tipo de dados SQLXML</span>
          </td>
          <td align="right">
            
          </td>
        </tr></table>
      
      
      
    </div>
    <div id="mainSection">
      
        
        
    <font color="DarkGray">
      
    </font>
    <p />
    
    <p />
  
        <div id="introductionSection" class="section">
    <p>Esse aplicativo de amostra do Microsoft SQL Server JDBC Driver demonstra como armazenar dados XML em um banco de dados relacional, como recuperar dados XML<b> </b>de um banco de dados, e como analisar dados XML<b> </b>com um tipo de dados <b>SQLXML</b> Java. </p>
    <p>Os exemplos de código nesta seção usam um analisador SAX (API Simples para XML). O SAX é um padrão publicamente desenvolvido para a análise de documentos XML baseada em eventos. Ele também fornece uma interface de programação de aplicativos para trabalhar com dados XML. Observe que os aplicativos também podem usar qualquer outro analisador de XML, como, por exemplo, o Modelo de Objeto de Documento (DOM) ou a StAX (API de Fluxo para XML), ou assim por diante. </p>
    <p>O Modelo de Objeto de Documento (DOM) fornece uma representação programática de documentos XML, fragmentos, nós ou conjuntos de nó. Ele também fornece uma interface de programação de aplicativos para trabalhar com dados XML. Da mesma forma, a StAX (API de Fluxo para XML) é uma API baseada em Java para análise de recepção de XML.</p>
    <div style="margin: .5em 1.5em .5em 1.5em"><b>Importante: </b>
      Para usar a API do analisador de SAX, você deve importar a implementação de SAX padrão do pacote javax.xml.<p />
    </div>
    <p>O arquivo de código deste exemplo chama-se sqlxmlExample.java e pode ser encontrado neste local:</p>
    <p>&lt;<i>installation directory</i>&gt;\sqljdbc_&lt;<i>version</i>&gt;\&lt;<i>language</i>&gt;\help\samples\datatypes</p>
  </div><h1 class="heading">Requisitos</h1><div id="requirementsSection" class="section">
    <content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Para executar este aplicativo de exemplo, é necessário definir o classpath para incluir o arquivo sqljdbc4.jar. Se no classpath faltar uma entrada para sqljdbc4.jar, o aplicativo de exemplo lançará a exceção comum "Class not found". Para obter mais informações sobre como definir o classpath, consulte <a href="6faaf05b-8b70-4ed2-9b44-eee5897f1cd0.htm">Usando JDBC Driver</a>.</p>
      <p xmlns="">Além disso, você precisa de acesso ao banco de dados de exemplo SQL Server 2005 AdventureWorks para executar este aplicativo de exemplo.</p>
    </content>
  </div><h1 class="heading">Exemplo</h1><div id="codeExampleSection" class="section">
    <description xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <content>
        <p xmlns="">No exemplo seguinte, o código de exemplo faz uma conexão com o banco de dados SQL Server 2005 AdventureWorks e, em seguida, invoca o método createSampleTables. </p>
        <p xmlns="">O método createSampleTables descarta as tabelas de teste, TestTable1 e TestTable2, se elas existirem. Então, ele insere duas linhas em TestTable1. </p>
        <p xmlns="">Além disso, o exemplo de código inclui os três métodos a seguir e uma classe adicional que é denominada ExampleContentHandler. </p>
        <p xmlns="">A classe ExampleContentHandler implementa um manipulador de conteúdo personalizado, que define métodos para eventos de analisador.</p>
        <p xmlns="">O método showGetters demonstra como analisar os dados no objeto SQLXML usando SAX, ContentHandler e XMLReader. Primeiro, o exemplo de código cria uma instância de um manipulador de conteúdo personalizado, que é ExampleContentHandler. Em seguida, ele cria e executa uma instrução SQL que retorna um conjunto de dados de TestTable1. Então, o exemplo de código obtém um analisador de SAX e analisa os dados XML.</p>
        <p xmlns="">O método showSetters demonstra como definir a coluna <b>xml</b> usando SAX, ContentHandler e ResultSet. Primeiro, ele cria um objeto SQLXML vazio usando o método <a href="cf5bfcdd-bc03-4c5b-b554-d8a8a4067e93.htm">createSQLXML</a> da classe Conexão. Então, ele obtém uma instância de um manipulador de conteúdo para gravar os dados no objeto SQLXML. Em seguida, o exemplo de código grava os dados em TestTable1. Por fim, o código de exemplo itera pelas linhas de dados que estão contidas no conjunto de resultados e usa o método <a href="a07e0f30-cbc6-4ad7-b931-c30cad382e64.htm">getSQLXML</a> para ler os dados XML.</p>
        <p xmlns="">O método showTransformer demonstra como obter dados XML de uma tabela e inserir esses dados XML em outra tabela usando SAX e Transformer. Primeiro, ele recupera o objeto SQLXML de origem do TestTable1. Então, ele cria um objeto SQLXML de destino vazio usando o método <a href="cf5bfcdd-bc03-4c5b-b554-d8a8a4067e93.htm">createSQLXML</a> da classe Conexão. Em seguida, ele atualiza o objeto SQLXML de destino e grava os dados XML em TestTable2. Por fim, o código de exemplo itera pelas linhas de dados que estão contidas no conjunto de resultados e usa o método <a href="a07e0f30-cbc6-4ad7-b931-c30cad382e64.htm">getSQLXML</a> para ler os dados XML em TestTable2.</p>
      </content>
    </description>
    <div class="sampleCode"><span codeLanguage="other"><pre>import java.sql.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.SAXTransformerFactory;

import org.xml.sax.*;

public class sqlxmlExample {

   public static void main(String[] args) {
	   
      // Create a variable for the connection string.
      String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=AdventureWorks;integratedSecurity=true;";

      // Declare the JDBC objects.
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;
      
      try {
         // Establish the connection.
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         con = DriverManager.getConnection(connectionUrl);

         // Create initial sample data.
         createSampleTables(con);
         
         // The showGetters method demonstrates how to parse the data in the 
         // SQLXML object by using the SAX, ContentHandler and XMLReader.  
         showGetters(con);            

         // The showSetters method demonstrates how to set the xml column 
         // by using the SAX, ContentHandler, and ResultSet.
         showSetters(con);   
         
         // The showTransformer method demonstrates how to get an XML data 
         // from one table and insert that XML data to another table 
         // by using the SAX and the Transformer. 
         showTransformer(con);        
      }
      // Handle any errors that may have occurred.
      catch (Exception e) {
         e.printStackTrace();
      }
      finally {
         if (rs != null) try { rs.close(); } catch(Exception e) {}
         if (stmt != null) try { stmt.close(); } catch(Exception e) {}
         if (con != null) try { con.close(); } catch(Exception e) {}
      }
   }
  
   private static void showGetters(Connection con) {
	   
      try {
          // Create an instance of the custom content handler.   
          ExampleContentHandler myHandler = new ExampleContentHandler();
		   
          // Create and execute an SQL statement that returns a
          // set of data.       
          String SQL = "SELECT * FROM TestTable1";
          Statement stmt = con.createStatement();
          ResultSet rs = stmt.executeQuery(SQL);
      
          rs.next();
        
          SQLXML xmlSource = rs.getSQLXML("Col3");
        
          // Send SAX events to the custom content handler.
          SAXSource sxSource =  xmlSource.getSource(SAXSource.class);
          XMLReader xmlReader = sxSource.getXMLReader();
          xmlReader.setContentHandler(myHandler);
          
	      System.out.println("showGetters method: Parse an XML data in TestTable1 =&gt; ");
          xmlReader.parse(sxSource.getInputSource());
        
      } catch (Exception e) {
          e.printStackTrace();
      }
   }
   
   private static void showSetters(Connection con) {

      try {
         // Create and execute an SQL statement, retrieving an updatable result set.
         String SQL = "SELECT * FROM TestTable1;";
         Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
         ResultSet rs = stmt.executeQuery(SQL);
		   
         // Create an empty SQLXML object.
         SQLXML sqlxml = con.createSQLXML();
 
         // Set the result value from SAX events.
         SAXResult sxResult = sqlxml.setResult(SAXResult.class);
         ContentHandler myHandler = sxResult.getHandler();

         // Set the XML elements and attributes into the result.
         myHandler.startDocument();
         myHandler.startElement(null, "contact", "contact", null);
         myHandler.startElement(null, "name", "name", null);
         myHandler.endElement(null, "name", "name");
         myHandler.startElement(null, "phone", "phone", null);
         myHandler.endElement(null, "phone", "phone");		   
         myHandler.endElement(null, "contact", "contact");
         myHandler.endDocument();

         // Update the data in the result set.
         rs.moveToInsertRow();
         rs.updateString("Col2", "C");
         rs.updateSQLXML("Col3", sqlxml);
         rs.insertRow();
		   
         // Display the data. 
         System.out.println("showSetters method: Display data in TestTable1 =&gt; ");
         while (rs.next()) {
           System.out.println(rs.getString("Col1") + " : " + rs.getString("Col2"));
           SQLXML xml = rs.getSQLXML("Col3");              
           System.out.println("XML column : " + xml.getString());
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   private static void showTransformer(Connection con) {

      try {
          // Create and execute an SQL statement that returns a
          // set of data.       
          String SQL = "SELECT * FROM TestTable1";
          Statement stmt = con.createStatement();
          ResultSet rs = stmt.executeQuery(SQL);
	       
          rs.next();
	        
          // Get the value of the source SQLXML object from the database.
          SQLXML xmlSource = rs.getSQLXML("Col3");
	        
          // Get a Source to read the XML data. 
          SAXSource sxSource =  xmlSource.getSource(SAXSource.class);
	        
         // Create a destination SQLXML object without any data.
         SQLXML xmlDest = con.createSQLXML();

         // Get a Result to write the XML data.
         SAXResult sxResult = xmlDest.setResult(SAXResult.class);
	        
         // Transform the Source to a Result by using the identity transform.
         SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance();
         Transformer identity = stf.newTransformer();
         identity.transform(sxSource, sxResult);

         // Insert the destination SQLXML object into the database.
         PreparedStatement psmt = 
           con.prepareStatement(
              "INSERT INTO TestTable2" + " (Col2, Col3, Col4, Col5) VALUES (?, ?, ?, ?)");
         psmt.setString(1, "A");
         psmt.setString(2, "Test data");
         psmt.setInt(3, 123);
         psmt.setSQLXML(4, xmlDest);
         psmt.execute();
	        
         // Execute the query and display the data.	
         SQL = "SELECT * FROM TestTable2";
         stmt = con.createStatement();
         rs = stmt.executeQuery(SQL);

         System.out.println("showTransformer method : Display data in TestTable2 =&gt; ");
         while (rs.next()) {
            System.out.println(rs.getString("Col1") + " : " + rs.getString("Col2"));
            System.out.println(rs.getString("Col3") + " : " + rs.getInt("Col4"));
	          
            SQLXML xml = rs.getSQLXML("Col5");              
            System.out.println("XML column : " + xml.getString());
         }
     } catch (Exception e) {
        e.printStackTrace();
     }
   }
   
   private static void createSampleTables(Connection con) {

      try {
	  Statement stmt = con.createStatement();
		  
          // Drop the tables.
	  stmt.executeUpdate("if exists (select * from sys.objects where name = 'TestTable1')" +
                "drop table TestTable1" );

          stmt.executeUpdate("if exists (select * from sys.objects where name = 'TestTable2')" +
                "drop table TestTable2" );		  

          // Create empty tables.
          stmt.execute("CREATE TABLE TestTable1 (Col1 int IDENTITY, Col2 char, Col3 xml)");
          stmt.execute("CREATE TABLE TestTable2 (Col1 int IDENTITY, Col2 char, Col3 varchar(50), Col4 int, Col5 xml)");

          // Insert two rows to the TestTable1.
         String row1 = "&lt;contact&gt;&lt;name&gt;Contact Name 1&lt;/name&gt;&lt;phone&gt;XXX-XXX-XXXX&lt;/phone&gt;&lt;/contact&gt;";
         String row2 = "&lt;contact&gt;&lt;name&gt;Contact Name 2&lt;/name&gt;&lt;phone&gt;YYY-YYY-YYYY&lt;/phone&gt;&lt;/contact&gt;";

         stmt.executeUpdate("insert into TestTable1" + " (Col2, Col3) values('A', '" + row1 +"')");
         stmt.executeUpdate("insert into TestTable1" + " (Col2, Col3) values('B', '" + row2 +"')");
	      
       } catch (Exception e) {
          e.printStackTrace();
       }
   }
}

class ExampleContentHandler implements ContentHandler {

  public void startElement(String namespaceURI, String localName, String qName, Attributes atts) 
  throws SAXException {
	  System.out.println("startElement method: localName =&gt; " + localName);
  }
  public void characters(char[] text, int start, int length) throws SAXException {
  	  System.out.println("characters method");  
  }
  public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
      System.out.println("endElement method: localName =&gt; " + localName);		  
  } 
  public void setDocumentLocator(Locator locator) {
	  System.out.println("setDocumentLocator method");
  }
  public void startDocument() throws SAXException {
	  System.out.println("startDocument method");
  }
  public void endDocument() throws SAXException {
	  System.out.println("endDocument method");
  }
  public void startPrefixMapping(String prefix, String uri) throws SAXException {
	  System.out.println("startPrefixMapping method: prefix =&gt; " + prefix);
  }
  public void endPrefixMapping(String prefix) throws SAXException {
	  System.out.println("endPrefixMapping method: prefix =&gt; " + prefix);
  }
  public void skippedEntity(String name) throws SAXException {
	  System.out.println("skippedEntity method: name =&gt; " + name);
  }  
  public void ignorableWhitespace(char[] text, int start, int length) throws SAXException {
	  System.out.println("ignorableWhiteSpace method");
  }
  public void processingInstruction(String target, String data) throws SAXException {
	  System.out.println("processingInstruction method: target =&gt; " + target);
  }
}
</pre></span></div>
  </div><span id="seeAlsoSpan"><h1 class="heading">Consulte também</h1></span><div id="seeAlsoSection" class="section" name="collapseableSection"><a href="b39f44d0-3710-4bc6-880c-35bd8c10a734.htm">Trabalhando com tipos de dados (JDBC)</a><br /><br /></div><!--[if gte IE 5]>
			<tool:tip element="seeAlsoToolTip" avoidmouse="false"/><tool:tip element="languageFilterToolTip" avoidmouse="false"/><tool:tip element="roleInfoSpan" avoidmouse="false"/>
		<![endif]-->
      <div id="footer" class="section">
        
		<hr />
		
		<span id="fb" class="feedbackcss">
			
			
		</span>
		
		<a href="9bad553b-9e70-4696-8499-2e35f772a1e0.htm">
			
			© 2010 Microsoft Corporation. Todos os direitos reservados.
		</a>
 	
	
      </div>
    </div>
  </body>
</html>